package com.company;

import java.sql.*;
import java.util.concurrent.Callable;

public class Main {

    public static void main(String[] args) {
        // write your code here
        test1();
        System.out.println("--------------------------------");
        test2();
    }

    public static void test2() {
        //创建写好的数据库操作对象
        try {
            TestDriver dbriver = new TestDriver();
            //调用查询方法
            ResultSet resultSet = dbriver.query("select * from books");

            if (resultSet != null) {
                while (resultSet.next()) {
                    //从resultSet中取出当前游标遍历行的数据
                    //resultSet封装了许多get..方法,可以分别查询出想要的信息

                    System.out.println(resultSet.getObject("bookname"));

                }
            }

            //设置游标归零
            resultSet.beforeFirst();

        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

    }

    public static void test1() {
        // (0) 准备数据库连接的相关参数
        //数据库的驱动类的名字 包路径名
        //Mysql8版本的驱动类的包路径名
        String strDriverNameMysql8 = "com.mysql.cj.jdbc.Driver";
        //Mysql5版本的驱动类的包路径名
        String strDriverNameMysql5 = "com.mysql.jdbc.Driver";
        ////Oracle版本的驱动类的包路径名
        String strDriverNameOracle = "oracle.jdbc.driver.OracleDriver";


        //数据库服务器的连接串
        // 连接串中的 localhost 127.0.0.1 ip地址 服务器名 表示服务器的访问路径  3306 mysql数据库服务器监听的端口号
        //Mysql8版本连接字符串
        String strURLMysql8 = "jdbc:mysql://localhost:3306/job?" +
                "useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Hongkong&allowPublicKeyRetrieval=true";
        //Mysql5版本连接字符串
        String strURLMysql5 = "jdbc:mysql://localhost:3306/tjise202103?useUnicode=true&characterEncoding=utf8";
        //Oracle版本连接字符串
        String strURLOracle = "jdbc:oracle:thin:@localhost:1521:orcl";

        //登录用户名和吗，密码
        String strUserName = "root";
        String strUserPsw = "Hkemmmm";


        try {
            // (1) 加载数据库驱动类；【使用反射】【可以省略】
            //如果jvm中没有数据库驱动类Driver实例对象，会自动根据连接串类型进行加载数据库驱动类的实例.
            Class.forName(strDriverNameMysql8);

            // (2) 通过DriverManager类的静态方法获取数据库的连接对象Connection；
            Connection conn = DriverManager.getConnection(strURLMysql8, strUserName, strUserPsw);


            // (3) 通过数据库连接对象获取查询器 Statement ；
            Statement statement = conn.createStatement();
            // (4) 准备数据库的SQL语句，用于处理业务逻辑；
            //数据库语句
            String strSql = "select * from books";
            // (5) 使用查询器执行SQL语句，如果是查询操作，则会返回一个ResultSet结果集；
            ResultSet resultSet = statement.executeQuery(strSql);
            // (6) 遍历ResultSet结果集对象，获取数据库中的数据，进行相关的业务逻辑处理；
            //返回的数据根据数据库游标进行遍历
            if (resultSet != null) {
                while (resultSet.next()) {
                    //从resultSet中取出当前游标遍历行的数据
                    //resultSet封装了许多get..方法,可以分别查询出想要的信息
                    System.out.println(resultSet.getObject("bookname"));
                }
            }

            //设置游标归零
            resultSet.beforeFirst();

            //关闭数据库连接,关闭之后不能在进行对数据库的操作
            conn.close();

        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
